package io.mft.as.adapter.bean;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import lombok.extern.slf4j.Slf4j;

/**
 * 描述: 
 * 版权: Copyright (c) 2012 
 * 公司: 思迪科技 
 * 作者: 李炜
 * 版本: 1.0 
 * 创建日期: Jul 10, 2013 
 * 创建时间: 2:43:45 PM
 */
@Slf4j
public class ResultVo
{


	private int errorNo;

	private String errorMsg="";

	/**
	 * 保存结果集信息
	 * 结果集可能有多个，key是结果集名称，值可以是map、list、DBPage
	 */
	private Map<String, Object> results = null;

	public ResultVo()
	{
		this.errorNo = BusConstants.INVOKE_FUNCTION_SUCCESS;
		results = new HashMap<String, Object>();
	}

	public static void main(String[] args)
	{
	}

	public int getErrorNo()
	{
		return errorNo;
	}

	public void setErrorNo(int errorNo)
	{
		this.errorNo = errorNo;
	}

	public String getErrorMsg()
	{
		return errorMsg;
	}

	public void setErrorMsg(String errorMsg)
	{
		this.errorMsg = errorMsg;
	}

	public Map<String, Object> getResults()
	{
		return results;
	}

	/**
	 *
	 * 描述：获取默认结果集的第一行内容
	 * 作者：李炜
	 * 时间：May 31, 2014 6:04:54 PM
	 * @return
	 */
	public DataRow getData()
	{
		Iterator<String> iter = results.keySet().iterator();
		if(iter.hasNext())
		{
			String key = iter.next();
			return getData(key);
		}
		else
		{
			log.warn("!!!!!!!!!!!结果集对象为空");
			return null;
		}
	}

	/**
	 *
	 * 描述：获取指定名称结果集的第一行内容
	 * 作者：李炜
	 * 时间：Jul 11, 2013 3:12:42 PM
	 * @param dsName
	 * @return
	 */
	public DataRow getData(String dsName)
	{
		Object value = getResult();
		if(value != null)
		{
			if(value instanceof DataRow)
			{
				return (DataRow) value;
			}
			else if(value instanceof Map)
			{
				DataRow dataRow = new DataRow();
				dataRow.putAll((Map) value);
				return dataRow;
			}
			else if(value instanceof List)
			{
				List dataList = (List) value;
				if(!dataList.isEmpty())
				{
					value = dataList.get(0);
					if(value instanceof DataRow)
					{
						return (DataRow) value;
					}
					else
					{
						return null;
					}
				}
				else
				{
					return null;
				}
			}
			else
			{
				return null;
			}
		}
		else
		{
			return null;
		}
	}

	public List getList()
	{
		Object value = getResult();
		if(value != null && value instanceof List)
		{
			return (List) value;
		}
		else
		{
			log.warn("!!!!!!!!!!!返回的不是List类型");
			return null;
		}
	}

	/**
	 *
	 * 描述：根据结果集名称返回结果集
	 * 作者：李炜
	 * 时间：May 22, 2013 10:22:45 AM
	 * @param index
	 * @return
	 */
	public List getList(String dsName)
	{
		Object value = getResult(dsName);
		if(value != null && value instanceof List)
		{
			return (List) value;
		}
		else
		{
			log.warn("!!!!!!!!!!!返回的不是List类型");
			return null;
		}
	}

	/**
	 *
	 * 描述：返回默认的分页对象
	 * 作者：李炜
	 * 时间：May 31, 2014 6:07:39 PM
	 * @return
	 */
	public DBPage getPage()
	{
		Object value = getResult();
		if(value != null && value instanceof DBPage)
		{
			return (DBPage) value;
		}
		else
		{
			log.warn("!!!!!!!!!!!返回的不是DBPage类型");
			return null;
		}
	}

	/**
	 *
	 * 描述：返回分页对象
	 * 作者：李炜
	 * 时间：May 31, 2014 6:06:28 PM
	 * @param dsName
	 * @return
	 */
	public DBPage getPage(String dsName)
	{
		Object value = getResult(dsName);
		if(value != null && value instanceof DBPage)
		{
			return (DBPage) value;
		}
		else
		{
			log.warn("!!!!!!!!!!!返回的不是DBPage类型");
			return null;
		}
	}

	/**
	 *
	 * 描述：
	 * 作者：李炜
	 * 时间：May 31, 2014 6:11:47 PM
	 * @return
	 */
	private Object getResult()
	{
		Iterator<String> iter = results.keySet().iterator();
		if(iter.hasNext())
		{
			String key = iter.next();
			return getResult(key);
		}
		else
		{
			log.warn("!!!!!!!!!!!返回的结果集为空");
			return null;
		}
	}

	/**
	 *
	 * 描述：当一个 接口只返回一个结果集时，可调用此方法
	 * 作者：李炜
	 * 时间：Jul 11, 2013 10:25:12 AM
	 * @param object
	 */
	public void setResult(Object object)
	{
		this.results.put("DataSet", object);
	}

	/**
	 *
	 * 描述：
	 * 作者：李炜
	 * 时间：May 31, 2014 6:11:44 PM
	 * @param dsName
	 * @return
	 */
	private Object getResult(String dsName)
	{
		return getResults().get(dsName);
	}

	/**
	 *
	 * 描述：多个结果集需使用此方法，前台根据结果集名称获取不同的数据
	 * 作者：李炜
	 * 时间：Jul 11, 2013 10:25:50 AM
	 * @param name
	 * @param object
	 */
	public void setResult(String name, Object object)
	{
		this.results.put(name, object);
	}
}
